#ifndef __FUN_H
#define __FUN_H
/*标准库头文件*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <assert.h>
/*数据库头文件*/
#include <sqlite3.h>
/*cJSON头文件*/
#include "cJSON.h"
/*MQTT头文件*/
#include "MQTTClient.h"
/*时间戳头文件*/
#include <sys/time.h>

/*共享内存、消息队列头文件*/
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>//共享内存
#include <sys/msg.h>//消息队列

/*mqtt相关配置宏定义*/
#define CLIENTID "BYD"
#define TOPIC "/app/data/down"
#define TOPIC_SEND "/app/data/up"
#define QOS 1
#define TIMEOUT 10000L

/*路径配置*/
#define NODE_PATH "./node.json"
#define SHM_NAME "shm_test"
#define MSG_NAME "msg_test"

#define MAGIC_ID 's'
#define UNUSED(x) (void)x;  //仅仅为了消除警告用，可解决未定义变量

/*共享内存结构体*/
union val_t
{
    int b_val;   // bool类型存储空间
    int i_val;   // 整形值存储空间
    float f_val; // 浮点值存储空间
};
struct std_node
{
    int key;             // 唯一键值
    int type;            // 数据点类型
    int dev_type;        // 数据点属于哪个设备，根据网关支持的设备自行定义 STM32--0/MODBUS---1
    union val_t old_val; // 变化上报后需要更新旧值
    union val_t new_val; // 从共享内存取出最新数据，放到new_val中
    int ret;             // 默认为-1，采集成功后设置为0，采集失败再置-1
};

//消息队列结构体
struct msgbuf
{
    long mtype;
    char mdata[256];
};
#endif